url <- 'https://raw.githubusercontent.com/kyleknox3/STA553/main/week6/LifeIncomePopulation.csv'
data <- read.csv(url)
income <- na.omit(data)
data2015 <- income %>%
filter(year == 2015)
write.csv(data2015, "/Users/kyleknox/Documents/M.S. Applied Statistics/SPRING 2024/STA533/week6/data2015.csv", row.names = FALSE)
regions <- c("Asia" = "#332288", "Europe" = "#117733", "Africa" = "#44AA99", "Americas" = "#88CCEE", "Oceania" = "#AA4499")
gg <- ggplot(data2015, aes(x = lifeExp, y = income, size = population,
color = region, text = paste("Country:", country,"<br>Population:", population))) +
geom_point(alpha = 0.7) +
scale_size_continuous(range = c(1, 20)) +
theme_minimal() +
labs(title = "Life Expectancy vs. Income in 2015",
x = "Life Expectancy",
y = "Income") +
scale_color_manual(values = regions, name = "Region") +
geom_point(shape = 21, colour = "black", fill = NA)
plotly_gg <- ggplotly(gg, tooltip = "text")
plotly_gg
url <- 'https://raw.githubusercontent.com/kyleknox3/STA553/main/week6/LifeIncomePopulation.csv'
data <- read.csv(url)
income2 <- na.omit(data)
regions <- c("Asia" = "#332288", "Europe" = "#117733", "Africa" = "#44AA99", "Americas" = "#88CCEE", "Oceania" = "#AA4499")
plot <- ggplot(income2, aes(x = lifeExp, y = income, size = population, color = region)) +
geom_point(alpha = 0.7, show.legend = TRUE, aes(group = year)) +
scale_size(range = c(2, 12), name = "Population Size") +
scale_color_manual(values = regions, name = "Region") +
labs(title= 'Life Expectancy and Income over the Years', subtitle = 'Year: {frame_time}', x = 'Life Expectancy', y = 'Income') +
theme_minimal() +
transition_time(year) +
ease_aes('linear')
animate(plot, width = 900, height = 500, duration = 30)
A Look Inside the Plot
There has been a significant increase in the average life expectancy
globally since the early 1800s. The shift is more prevalent in the early
20th century. These life expectancy improvements could be related to
advancements in healthcare, nutrition, and living conditions over time.
Income has an overall positive trend, with a steep incline
after the mid 20th century. Some causes for these increases could be a
result of industrialization, globalization, and technological advances
that have influenced productivity. There is a significant increase in
income in the late 20th century, which could be indicative of economic
expansion.
The worlds population has also shown significant
growth since the 1800s, with an acceleration in the rate of increase
from the 20th century to present day. This increased population could be
a result of decreased mortality rates, medical advancements, and other
factors leading to higher birth rates and lower death rates. With a
continued increase in the global population challenges like resource
management, sustainability, and a detrimental environmental impact will
arise.
With the increased income, population, and life
expectancy over the past few centuries, it shows the the global economic
increases for the worlds population. However, these increases do provide
challenges for the future in sustainability and the distribution of
resources. These challenges are not just limited regionally but also
globally.
LS0tCnRpdGxlOiAiTGlmZSBFeHBlY3RhbmN5IGFuZCBJbmNvbWUgZm9yIHRoZSBZZWFyIDIwMTUiCmF1dGhvcjogIkt5bGUgS25veCIKZGF0ZTogIldlZWsgNiIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6IAogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIGZpZ193aWR0aDogNgogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRvY19jb2xsYXBzZWQ6IHllcwogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMKICAgIHNtb290aF9zY3JvbGw6IHRydWUKICAgIHRoZW1lOiByZWFkYWJsZQogICAgZmlnX2hlaWdodDogNAotLS0KICAKICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogIAogIGRpdiNUT0MgbGkgewpsaXN0LXN0eWxlOm5vbmU7CmJhY2tncm91bmQtY29sb3I6bGlnaHRncmF5OwpiYWNrZ3JvdW5kLWltYWdlOm5vbmU7CmJhY2tncm91bmQtcmVwZWF0Om5vbmU7CmJhY2tncm91bmQtcG9zaXRpb246MDsKZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7CmNvbG9yOiAjNzgwYzBjOwogIH0KCi8qIG1vdXNlIG92ZXIgbGluayAqLwogIGRpdiNUT0MgYTpob3ZlciB7CmNvbG9yOiByZWQ7Cn0KCi8qIHVudmlzaXRlZCBsaW5rICovCiAgZGl2I1RPQyBhOmxpbmsgewpjb2xvcjogYmx1ZTsKfQoKCgpoMS50aXRsZSB7CiAgZm9udC1zaXplOiAyNHB4OwogIGNvbG9yOiBEYXJrYmx1ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7CiAgZm9udC12YXJpYW50LWNhcHM6IG5vcm1hbDsKfQpoNC5hdXRob3IgeyAKICBmb250LXNpemU6IDE4cHg7CiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgY29sb3I6IERhcmtSZWQ7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Cmg0LmRhdGUgeyAKICBmb250LXNpemU6IDE4cHg7CiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgY29sb3I6IERhcmtCbHVlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQpoMSB7CiAgZm9udC1zaXplOiAyMnB4OwogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogIGNvbG9yOiBkYXJrcmVkOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQpoMiB7IC8KICAgIGZvbnQtc2l6ZTogMThweDsKICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICBjb2xvcjogbmF2eTsKICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgpoMyB7IAogIGZvbnQtc2l6ZTogMTVweDsKICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICBjb2xvcjogbmF2eTsKICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgpoNCB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgICBmb250LXNpemU6IDE4cHg7CiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgY29sb3I6IGRhcmtyZWQ7CiAgdGV4dC1hbGlnbjogbGVmdDsKfQoKLyogdW52aXNpdGVkIGxpbmsgKi8KICBhOmxpbmsgewogICAgY29sb3I6IGdyZWVuOwogIH0KCi8qIHZpc2l0ZWQgbGluayAqLwogIGE6dmlzaXRlZCB7CiAgICBjb2xvcjogZ3JlZW47CiAgfQoKLyogbW91c2Ugb3ZlciBsaW5rICovCiAgYTpob3ZlciB7CiAgICBjb2xvcjogcmVkOwogIH0KCi8qIHNlbGVjdGVkIGxpbmsgKi8KICBhOmFjdGl2ZSB7CiAgICBjb2xvcjogeWVsbG93OwogIH0KCjwvc3R5bGU+CiAgCiAgCiAgYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CiMgY29kZSBjaHVuayBzcGVjaWZpZXMgd2hldGhlciB0aGUgUiBjb2RlLCB3YXJuaW5ncywgYW5kIG91dHB1dCAKIyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZXMuCm9wdGlvbnMocmVwb3MgPSBsaXN0KENSQU49Imh0dHA6Ly9jcmFuLnJzdHVkaW8uY29tLyIpKQppZiAoIXJlcXVpcmUoInRpZHl2ZXJzZSIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikKICBsaWJyYXJ5KHRpZHl2ZXJzZSkKfQppZiAoIXJlcXVpcmUoImtuaXRyIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJrbml0ciIpCiAgbGlicmFyeShrbml0cikKfQppZiAoIXJlcXVpcmUoImNvd3Bsb3QiKSkgewogIGluc3RhbGwucGFja2FnZXMoImNvd3Bsb3QiKQogIGxpYnJhcnkoY293cGxvdCkKfQppZiAoIXJlcXVpcmUoImxhdGV4MmV4cCIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygibGF0ZXgyZXhwIikKICBsaWJyYXJ5KGxhdGV4MmV4cCkKfQppZiAoIXJlcXVpcmUoInBsb3RseSIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygicGxvdGx5IikKICBsaWJyYXJ5KHBsb3RseSkKfQppZiAoIXJlcXVpcmUoImdhcG1pbmRlciIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2FwbWluZGVyIikKICBsaWJyYXJ5KGdhcG1pbmRlcikKfQppZiAoIXJlcXVpcmUoInBuZyIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygicG5nIikgICAgICAgICAgICAgIyBJbnN0YWxsIHBuZyBwYWNrYWdlCiAgbGlicmFyeSgicG5nIikKfQppZiAoIXJlcXVpcmUoIlJDdXJsIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJSQ3VybCIpICAgICAgICAgICAgICMgSW5zdGFsbCBSQ3VybCBwYWNrYWdlCiAgbGlicmFyeSgiUkN1cmwiKQp9CmlmICghcmVxdWlyZSgiY29sb3VycGlja2VyIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJjb2xvdXJwaWNrZXIiKSAgICAgICAgICAgICAgCiAgbGlicmFyeSgiY29sb3VycGlja2VyIikKfQppZiAoIXJlcXVpcmUoImdpZnNraSIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2lmc2tpIikgICAgICAgICAgICAgIAogIGxpYnJhcnkoImdpZnNraSIpCn0KaWYgKCFyZXF1aXJlKCJtYWdpY2siKSkgewogIGluc3RhbGwucGFja2FnZXMoIm1hZ2ljayIpICAgICAgICAgICAgICAKICBsaWJyYXJ5KCJtYWdpY2siKQp9CmlmICghcmVxdWlyZSgiZ3JEZXZpY2VzIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJnckRldmljZXMiKSAgICAgICAgICAgICAgCiAgbGlicmFyeSgiZ3JEZXZpY2VzIikKfQojIyMgZ2dwbG90IGFuZCBleHRlbnNpb25zCmlmICghcmVxdWlyZSgiZ2dwbG90MiIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpICAgICAgICAgICAgICAKICBsaWJyYXJ5KCJnZ3Bsb3QyIikKfQppZiAoIXJlcXVpcmUoImdnYW5pbWF0ZSIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2dhbmltYXRlIikgICAgICAgICAgICAgIAogIGxpYnJhcnkoImdnYW5pbWF0ZSIpCn0KaWYgKCFyZXF1aXJlKCJnZ3JpZGdlcyIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2dyaWRnZXMiKSAgICAgICAgICAgICAgCiAgbGlicmFyeSgiZ2dyaWRnZXMiKQp9CmlmICghcmVxdWlyZSgiZHBseXIiKSkgewogIGluc3RhbGwucGFja2FnZXMoImRwbHlyIikgICAgICAgICAgICAgIAogIGxpYnJhcnkoImRwbHlyIikKfQppZiAoIXJlcXVpcmUoImh0bWx0b29scyIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiaHRtbHRvb2xzIikgICAgICAgICAgICAgIAogIGxpYnJhcnkoImh0bWx0b29scyIpCn0KaWYgKCFyZXF1aXJlKCJybWFya2Rvd24iKSkgewogIGluc3RhbGwucGFja2FnZXMoInJtYXJrZG93biIpICAgICAgICAgICAgICAKICBsaWJyYXJ5KCJybWFya2Rvd24iKQp9CiMga25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSAiL1VzZXJzL2t5bGVrbm94L0RvY3VtZW50cy9NLlMuIEFwcGxpZWQgU3RhdGlzdGljcy9TUFJJTkcgMjAyNC9TVEE1MzMvd2VlazYpCiMga25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSAiQzpcXFNUQTQ5MFxcdzA1IikKCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UsICAgCiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBUUlVFLCAgIAogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFKQpgYGAKYGBge3IgY29kZSwgZmlnLndpZHRoPTEwLCBmaWcuaGVpZ2h0PTYuOH0KdXJsIDwtICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20va3lsZWtub3gzL1NUQTU1My9tYWluL3dlZWs2L0xpZmVJbmNvbWVQb3B1bGF0aW9uLmNzdicKZGF0YSA8LSByZWFkLmNzdih1cmwpCmluY29tZSA8LSBuYS5vbWl0KGRhdGEpCgpkYXRhMjAxNSA8LSBpbmNvbWUgJT4lCiAgZmlsdGVyKHllYXIgPT0gMjAxNSkKCndyaXRlLmNzdihkYXRhMjAxNSwgIi9Vc2Vycy9reWxla25veC9Eb2N1bWVudHMvTS5TLiBBcHBsaWVkIFN0YXRpc3RpY3MvU1BSSU5HIDIwMjQvU1RBNTMzL3dlZWs2L2RhdGEyMDE1LmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQoKcmVnaW9ucyA8LSBjKCJBc2lhIiA9ICIjMzMyMjg4IiwgIkV1cm9wZSIgPSAiIzExNzczMyIsICJBZnJpY2EiID0gIiM0NEFBOTkiLCAiQW1lcmljYXMiID0gIiM4OENDRUUiLCAiT2NlYW5pYSIgPSAiI0FBNDQ5OSIpCgpnZyA8LSBnZ3Bsb3QoZGF0YTIwMTUsIGFlcyh4ID0gbGlmZUV4cCwgeSA9IGluY29tZSwgc2l6ZSA9IHBvcHVsYXRpb24sIAogICAgICBjb2xvciA9IHJlZ2lvbiwgdGV4dCA9IHBhc3RlKCJDb3VudHJ5OiIsIGNvdW50cnksIjxicj5Qb3B1bGF0aW9uOiIsIHBvcHVsYXRpb24pKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcpICsgCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKHJhbmdlID0gYygxLCAyMCkpICsgCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHRpdGxlID0gIkxpZmUgRXhwZWN0YW5jeSB2cy4gSW5jb21lIGluIDIwMTUiLAogICAgICAgeCA9ICJMaWZlIEV4cGVjdGFuY3kiLAogICAgICAgeSA9ICJJbmNvbWUiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IHJlZ2lvbnMsIG5hbWUgPSAiUmVnaW9uIikgKyAKICBnZW9tX3BvaW50KHNoYXBlID0gMjEsIGNvbG91ciA9ICJibGFjayIsIGZpbGwgPSBOQSkgCgoKcGxvdGx5X2dnIDwtIGdncGxvdGx5KGdnLCB0b29sdGlwID0gInRleHQiKQoKcGxvdGx5X2dnCgpgYGAKYGBge3IgcGxvdC1hbmltYXRpb24sIGZpZy53aWR0aD0xMCwgZmlnLmhlaWdodD02Ljh9CnVybCA8LSAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2t5bGVrbm94My9TVEE1NTMvbWFpbi93ZWVrNi9MaWZlSW5jb21lUG9wdWxhdGlvbi5jc3YnCmRhdGEgPC0gcmVhZC5jc3YodXJsKQppbmNvbWUyIDwtIG5hLm9taXQoZGF0YSkKCnJlZ2lvbnMgPC0gYygiQXNpYSIgPSAiIzMzMjI4OCIsICJFdXJvcGUiID0gIiMxMTc3MzMiLCAiQWZyaWNhIiA9ICIjNDRBQTk5IiwgIkFtZXJpY2FzIiA9ICIjODhDQ0VFIiwgIk9jZWFuaWEiID0gIiNBQTQ0OTkiKQoKcGxvdCA8LSBnZ3Bsb3QoaW5jb21lMiwgYWVzKHggPSBsaWZlRXhwLCB5ID0gaW5jb21lLCBzaXplID0gcG9wdWxhdGlvbiwgY29sb3IgPSByZWdpb24pKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNywgc2hvdy5sZWdlbmQgPSBUUlVFLCBhZXMoZ3JvdXAgPSB5ZWFyKSkgKwogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDEyKSwgbmFtZSA9ICJQb3B1bGF0aW9uIFNpemUiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IHJlZ2lvbnMsIG5hbWUgPSAiUmVnaW9uIikgKwogIGxhYnModGl0bGU9ICdMaWZlIEV4cGVjdGFuY3kgYW5kIEluY29tZSBvdmVyIHRoZSBZZWFycycsIHN1YnRpdGxlID0gJ1llYXI6IHtmcmFtZV90aW1lfScsIHggPSAnTGlmZSBFeHBlY3RhbmN5JywgeSA9ICdJbmNvbWUnKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0cmFuc2l0aW9uX3RpbWUoeWVhcikgKwogIGVhc2VfYWVzKCdsaW5lYXInKQoKYW5pbWF0ZShwbG90LCB3aWR0aCA9IDkwMCwgaGVpZ2h0ID0gNTAwLCBkdXJhdGlvbiA9IDMwKQpgYGAKPGJyPgo8YnI+CjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+QSBMb29rIEluc2lkZSB0aGUgUGxvdDwvc3Bhbj48L2Rpdj4KCjxkaXYgc3R5bGU9IndpZHRoOiA5NSU7IG1hcmdpbjogMCBhdXRvOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBib3JkZXI6IDFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiAxMHB4OyBib3gtc2l6aW5nOiBib3JkZXItYm94OyI+CiAgPHAgc3R5bGU9InRleHQtYWxpZ246IGp1c3RpZnk7Ij4KVGhlcmUgaGFzIGJlZW4gYSBzaWduaWZpY2FudCBpbmNyZWFzZSBpbiB0aGUgYXZlcmFnZSBsaWZlIGV4cGVjdGFuY3kgZ2xvYmFsbHkgc2luY2UgdGhlIGVhcmx5IDE4MDBzLiAgVGhlIHNoaWZ0IGlzIG1vcmUgcHJldmFsZW50IGluIHRoZSBlYXJseSAyMHRoIGNlbnR1cnkuICBUaGVzZSBsaWZlIGV4cGVjdGFuY3kgaW1wcm92ZW1lbnRzIGNvdWxkIGJlIHJlbGF0ZWQgdG8gYWR2YW5jZW1lbnRzIGluIGhlYWx0aGNhcmUsIG51dHJpdGlvbiwgYW5kIGxpdmluZyBjb25kaXRpb25zIG92ZXIgdGltZS4gPGJyPgo8YnI+CkluY29tZSBoYXMgYW4gb3ZlcmFsbCBwb3NpdGl2ZSB0cmVuZCwgd2l0aCBhIHN0ZWVwIGluY2xpbmUgYWZ0ZXIgdGhlIG1pZCAyMHRoIGNlbnR1cnkuICBTb21lIGNhdXNlcyBmb3IgdGhlc2UgaW5jcmVhc2VzIGNvdWxkIGJlIGEgcmVzdWx0IG9mIGluZHVzdHJpYWxpemF0aW9uLCBnbG9iYWxpemF0aW9uLCBhbmQgdGVjaG5vbG9naWNhbCBhZHZhbmNlcyB0aGF0IGhhdmUgaW5mbHVlbmNlZCBwcm9kdWN0aXZpdHkuIFRoZXJlIGlzIGEgc2lnbmlmaWNhbnQgaW5jcmVhc2UgaW4gaW5jb21lIGluIHRoZSBsYXRlIDIwdGggY2VudHVyeSwgd2hpY2ggY291bGQgYmUgaW5kaWNhdGl2ZSBvZiBlY29ub21pYyBleHBhbnNpb24uIDxicj4KPGJyPgpUaGUgd29ybGRzIHBvcHVsYXRpb24gaGFzIGFsc28gc2hvd24gc2lnbmlmaWNhbnQgZ3Jvd3RoIHNpbmNlIHRoZSAxODAwcywgd2l0aCBhbiBhY2NlbGVyYXRpb24gaW4gdGhlIHJhdGUgb2YgaW5jcmVhc2UgZnJvbSB0aGUgMjB0aCBjZW50dXJ5IHRvIHByZXNlbnQgZGF5LiAgVGhpcyBpbmNyZWFzZWQgcG9wdWxhdGlvbiBjb3VsZCBiZSBhIHJlc3VsdCBvZiBkZWNyZWFzZWQgbW9ydGFsaXR5IHJhdGVzLCBtZWRpY2FsIGFkdmFuY2VtZW50cywgYW5kIG90aGVyIGZhY3RvcnMgbGVhZGluZyB0byBoaWdoZXIgYmlydGggcmF0ZXMgYW5kIGxvd2VyIGRlYXRoIHJhdGVzLiBXaXRoIGEgY29udGludWVkIGluY3JlYXNlIGluIHRoZSBnbG9iYWwgcG9wdWxhdGlvbiBjaGFsbGVuZ2VzIGxpa2UgcmVzb3VyY2UgbWFuYWdlbWVudCwgc3VzdGFpbmFiaWxpdHksIGFuZCBhIGRldHJpbWVudGFsIGVudmlyb25tZW50YWwgaW1wYWN0IHdpbGwgYXJpc2UuPGJyPgo8YnI+CldpdGggdGhlIGluY3JlYXNlZCBpbmNvbWUsIHBvcHVsYXRpb24sIGFuZCBsaWZlIGV4cGVjdGFuY3kgb3ZlciB0aGUgcGFzdCBmZXcgY2VudHVyaWVzLCBpdCBzaG93cyB0aGUgdGhlIGdsb2JhbCBlY29ub21pYyBpbmNyZWFzZXMgZm9yIHRoZSB3b3JsZHMgcG9wdWxhdGlvbi4gIEhvd2V2ZXIsIHRoZXNlIGluY3JlYXNlcyBkbyBwcm92aWRlIGNoYWxsZW5nZXMgZm9yIHRoZSBmdXR1cmUgaW4gc3VzdGFpbmFiaWxpdHkgYW5kIHRoZSBkaXN0cmlidXRpb24gb2YgcmVzb3VyY2VzLiBUaGVzZSBjaGFsbGVuZ2VzIGFyZSBub3QganVzdCBsaW1pdGVkIHJlZ2lvbmFsbHkgYnV0IGFsc28gZ2xvYmFsbHkuPGJyPgogPC9wPgo8L2Rpdj4KPGJyPgo8YnI+Cgo=